<?php
class SiteController extends Controller
{
	public function filters()
	{
		return array(
			'accessControl',
		);
	}

	public function accessRules()
	{
		return array(
			array('allow',
				'actions' => array(
					'login',
					'register',
					'formatquery',
					'error',
					'cookieshack'
				),
				'users' => array('*'),
			),		
			array('allow',
				'actions' => array(
					'index',
					'popular',
					'based',
					'logout',
					'recommends'
				),
				'users' => array('@'),
			),
			array('deny',
				'users' => array('*'),
			),
		);
	}

	/**
	 * Встречаем данные с вконтактика
	 */
	public function actionIndex()
	{
		$this->layout = '//layouts/playerLayout';
		$this->setScriptConfig('get_profiles', true);
		$this->setScriptConfig('get_friends', true);
		$this->setScriptConfig('get_albums', true);
		$this->setScriptConfig('get_audio', true);
		$this->setScriptConfig('viewer_id', Yii::app()->user->getId());
				
		$this->render('index');
	}
	
	public function actionPopular()
	{
		$imhonet_result = Yii::app()->Imhonet->run(
			'popular',
			array(
				'func' => 'get_populars',
				'min_users_amount' => 100
			)
		);

		if (!empty($imhonet_result->popular_list)) {
			$data['tracklist'] = $imhonet_result->popular_list;
		}
		if (Yii::app()->request->isAjaxRequest) {
			echo json_encode($data);
		} else {
			$this->render('popular', $data);
		}
	}

	public function actionRecommends()
	{
		$imhonet_result = Yii::app()->Imhonet->run(
			'recommends',
			array('func' => 'get_recommends')
		);

		if (!empty($imhonet_result->recommend_list)) {
			$data['tracklist'] = $imhonet_result->recommend_list;
		}

		if ($imhonet_result->error_code) {
			switch ($imhonet_result->error_code) {
				case 10:
					$error_text = 'рекомендации еще не расчитаны, обратитесь позднее';
					break;
				case 16:
					$error_text = 'РО есть, слишком жесткие выходные фильтры';
					break;
				case 18:
					$error_text = 'отсутствуют рекомендации из-за недостатка оценок';
					break;
				case 19:
					$error_text = 'отсутствуют рекомендации из-за оригинального вкуса';
					break;
				default:
					$error_text = '';
					break;
			}
			$data['error_text'] = $error_text;
		}

		if (Yii::app()->request->isAjaxRequest) {
			echo json_encode($data);
		}
	}
	
	public function actionBased()
	{
		if (!Yii::app()->request->isAjaxRequest) {
			throw new CHttpException(404);
		}

		$imhonet_result = Yii::app()->Imhonet->run(
			'recommends',
			array(
				'func' => 'get_item_based',
				'audio_hash' => $_POST['hash'],
			)
		);
		
		if (!empty($imhonet_result->based_list)) {
			$data['tracklist'] = $imhonet_result->based_list;
		} else {
			$data['error_text'] = 'для данной композиции похожие объекты не расчитаны';
		}
		echo json_encode($data);
	}
	
	public function actionError()
	{
		if ($error=Yii::app()->errorHandler->error) {
			if (Yii::app()->request->isAjaxRequest) {
				echo $error['message'];
			} else {
				$this->render('error', $error);
			}
		}
	}

	public function actionCookiesHack(){}
	
	public function actionLogin()
	{
		$identity = new UserIdentity();
		$identity->authenticate();
		
		if ($identity->errorCode===UserIdentity::ERROR_NONE) {	
			Yii::app()->user->login($identity);
			/* В хроме замечаен баг с сессией
			 * эта скотина ходит без кукисов..
			 * если появится - надо курить*/	
			//$this->actionIndex();
			$this->redirect('/');
		} elseif ($identity->errorCode===UserIdentity::NEW_USER) {
			$this->redirect('registration');
		} else {
			throw new CHttpException(403);
		}
	}
	
	public function actionRegister()
	{
		$session=new CHttpSession;
		$session->open();
		$vkSession = $session['vk_params'];
		
		if ( empty($vkSession) ) {
			throw new CHttpException(403);
		}

		$viewer_id = $vkSession['viewer_id'];
			
		if (Yii::app()->request->isAjaxRequest) {
			if ( empty($_POST['profiles']) ) {
				throw new CHttpException(403);
			}
			
			$params['profiles'] = $_POST['profiles'];
			Yii::app()->Imhonet->setAuthParams($vkSession);
			Yii::app()->Imhonet->run('register', $params);
			
			$data = array(
				'redirect' => '/login'
			);
			echo json_encode($data);	
		} else {
			$this->render('register', array('viewer_id' => $viewer_id));
		}
	}

	public function actionFormatQuery()
	{
		if(Yii::app()->request->isAjaxRequest) {
			$data['params'] = Yii::app()->VKApi->formatQuery($_POST['params']);
			echo json_encode($data);	
		} else {
			throw new CHttpException(404);
		}
	}
	
	public function actionLogout()
	{
		Yii::app()->user->logout();
		$this->redirect(Yii::app()->homeUrl);
	}
}
